package com.dhecp.project.system.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.dhecp.common.config.Global;
import com.dhecp.common.constant.Constants;
import com.dhecp.common.core.domain.AjaxResult;
import com.dhecp.common.core.text.Convert;
import com.dhecp.common.utils.MessageUtils;
import com.dhecp.common.utils.StringUtils;
import com.dhecp.common.utils.file.FileUtils;
import com.dhecp.core.utils.PageUtils;
import com.dhecp.framework.util.ShiroUtils;
import com.dhecp.project.system.mapper.SysFilesInfoMapper;
import com.dhecp.project.system.domain.SysFilesInfo;
import com.dhecp.project.system.service.SysFilesInfoService;

/**
 * 文件上传下载Service业务层处理
 * 
 * @author kimiloo
 * @date 2020-02-15
 */
@Service
public class SysFilesInfoServiceImpl implements SysFilesInfoService 
{
    @Autowired
    private SysFilesInfoMapper sysFilesInfoMapper;
    
    /**
	 * 通过文件标记获取文件列表
	 * @author xdh
	 */
	@Override
	public List<SysFilesInfo> listSysFilesInfoByFileMark(String fileMark){
		return sysFilesInfoMapper.listByFileMark(fileMark);
	}

    /**
     * 查询文件上传下载
     * 
     * @param noticeId 文件上传下载ID
     * @return 文件上传下载
     */
    @Override
    public SysFilesInfo selectSysFilesInfoById(String guid)
    {
        return sysFilesInfoMapper.selectSysFilesInfoById(guid);
    }

    /**
     * 按条件查询用户列表 —— 精简数据
     * @param  实体参数 
     * @return List-SysFilesInfo
     * @author kimiloo
     * @throws Exception
     */
    @Override
    public List<SysFilesInfo> queryList(Map<String, Object> params) throws Exception {
        PageUtils.startPage();
        return sysFilesInfoMapper.selectSysFilesInfoList(params);
    }
    /**
     * 按条件查询用户列表 —— 精简数据
     * @param  实体参数
     * @return List-SysFilesInfo
     * @author kimiloo
     * @throws Exception
     */
    @Override
    public List<SysFilesInfo> queryList2(Map<String, Object> params) throws Exception {
        PageUtils.startPage();
        return sysFilesInfoMapper.selectSysFilesInfoList2(params);
    }
    
    /**
	 * 查询指定模块的调入打印模板列表
	 * @param fileMark 必要参数：moduleTable值
	 * @return List - SysFilesInfo
	 * @author kimiloo
	 */
	@Override
	public List<SysFilesInfo> queryReportForModule(Map<String, Object> params){
		return sysFilesInfoMapper.findReportForModule(params);
	}

    /**
     * 新增文件
     * 
     * @param sysFilesInfo 文件上传下载
     * @return 结果
	 * @author kimiloo
     */
//    @Override
    public AjaxResult insertSysFilesInfo(Map<String, Object> params) 
    {
    	//params.put("createUser", ShiroUtils.getMandatorId());//20200714改成用传
    	sysFilesInfoMapper.insertSysFilesInfo(params);
    	return AjaxResult.success(MessageUtils.message("module.success.issuccess"));
    }

    /**
     * 批量删除文件
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
	 * @author kimiloo
     */
    @Override
    public AjaxResult deleteSysFilesInfoByIds(String ids)
    {
        sysFilesInfoMapper.deleteSysFilesInfoByIds(Convert.toStrArray(ids));
        return AjaxResult.success(MessageUtils.message("module.success.issuccess"));
    }

    /**
     * 删除文件
     * 
     * @param infoItems 必要参数：对应实体类的json格式字符串
     * @return 结果
	 * @author kimiloo
     */
    @Override
    public AjaxResult deleteSysFilesInfoById(Map<String, Object> params)
    {
    	List<SysFilesInfo> filesList = JSON.parseArray(params.get("infoItems").toString(), SysFilesInfo.class);
    	if (filesList == null || filesList.size() == 0) {
			return AjaxResult.error(MessageUtils.message("upload.delete.error"));
		}
    	for (SysFilesInfo sysFilesInfo : filesList){
    		String guid = sysFilesInfo.getGuid();
            String filePath = Global.getProfile() + StringUtils.substringAfter(sysFilesInfo.getFilePath(), Constants.RESOURCE_PREFIX);//sysFilesInfo.getFilePath().replace("/profile", "");
    		sysFilesInfoMapper.deleteSysFilesInfoById(guid);
            FileUtils.deleteFile(filePath);		//删除文件    
		}
    	return AjaxResult.success(MessageUtils.message("module.success.issuccess"));
    }
    
    /**
     * 通过guid修改是否隐藏字段
     * @param infoItems 必要参数：对应实体类的json格式字符串，包含（guid,bHidden）
     * @return
     * @author DH-Xxj
     */
    @Override
    public AjaxResult updateBHidden(Map<String, Object> params) {
        List<SysFilesInfo> filesInfoList = JSON.parseArray(params.get("infoItems").toString(), SysFilesInfo.class);
        if (filesInfoList == null || filesInfoList.size() == 0) {
            return AjaxResult.error("数据包格式有误，请检查！");
        }
        for (SysFilesInfo filesInfo : filesInfoList) {
        	filesInfo.setUpdateUser(ShiroUtils.getUserId());
        	filesInfo.setUpdateTime(new Date());
        	sysFilesInfoMapper.updateBHidden(filesInfo);
        }
        return AjaxResult.success("操作成功");
    }
    
    /**
     * 获取过期删除附件
     * 
     * @param ids 文件guid
     * @param days 附件删除期限
     * @return List - SysFilesInfo
	 * @author kimiloo
     */
    @Override
    public List<SysFilesInfo> overDateList(List<String> ids, Integer days)
    {
    	return sysFilesInfoMapper.overDateList(ids,days);
    }
    
}
